A computer storage array, also called a disk array, is generally a data storage system to which a number of data storage devices, such as hard disk drives (HDDs) and solid-state disk drives (SSDs), are connected. Computer storage arrays are designed to be highly scalable and offer shared data access to multiple initiators, who may be endpoint clients, computer servers, and/or other data consumers.
Storage devices that support the Non-Volatile Memory Express over Fabrics (NVMe-oF) specification (hereinafter, “NVMe-oF devices” for convenience) are becoming more popular, especially for use in computer storage arrays, due to their high performance and scalability. NVMe-oF is a technology specification designed to enable NVMe message-based commands to transfer data between an initiator, such as a host computer, and an NVMe-oF device or system over a network such as Ethernet, Fibre Channel, and InfiniBand. Thus, an NVMe-oF device generally includes functions of both a networking device (e.g., has Ethernet controller(s)) and a storage device (e.g., has SSD(s)).
As a networking device, the networking settings of an NVMe-oF device would need to be configured before an initiator can establish an NVMe-oF connection with the NVMe-oF device. One possible solution is to develop an NVMe-oF Device Driver for Linux and Windows similar to a Network Interface Controller (NIC) or host bus adapter such as RAID vendors. The advantages of providing a device driver are similar to those of existing methods of configuring a network controller card by using existing network configuration tools. However, this is not a typical business model, and storage manufactures may not have the competency to develop a new storage device driver for Linux and Windows, maintain the device driver for each distribution and support to Linux open source community.
Another prior art method is to have a default static IP address known to the host assigned to each NVMe-oF device. In this case, all NVMe-oF devices will have the same static default IP address initially. The network interface of the NVMe-oF can be configured through the network device driver or hardcoded from the manufacturer. Unfortunately, this model does not fit well with the current standard storage devices since only a storage protocol driver (not device configuration) is provided for these storage devices. After the host communicates to the target via the default IP address, then the IP address can be changed. However, this is a slow process since some NVMe-oF devices may connect to different initiators. In addition, this may not work when all the NVMe-oF are connected to an Ethernet switch and they all have the same IP address. Furthermore, the NVMe-oF standard specification does not disclose how. A better solution is to enable users or system admin to dynamically configure these devices through the control plane during system initialization, according to the presently disclosed system and method. There may be additional requirements for the NVMe-oF to be configured correctly. For example, the NVMe-oF device may be required to be configured according to which RDMA protocol (RoCE2 vs iWARP) it needs to support.
Although the local computer processing unit (CPU) of a computer storage array may be used to configure the network settings (e.g., IP address) of the NVMe-oF device, which is connected to the CPU via a control plane, doing so would require the CPU to perform context switching between synchronous and asynchronous processes, thereby increasing the chances of crashing the storage array. The chances of crashing are increased when a plurality of NVMe-oF devices connected to the storage array needs to be configured. Furthermore, the current NVMe-oF specification does not specify how to configure the Ethernet controllers of an NVMe-oF device via the control plane. As such, using the CPU of the storage array to configure the NVMe-oF devices may not be desirable.
As a storage device, the NVMe-oF settings of the NVMe-oF device would also need to be configured before running data traffic. Although the local CPU of the storage array may also be used to configure the NVMe-oF settings (e.g., NVMe Qualified name, size of Admin Submission Queue, etc.) of the NVMe-oF device, it may not be desirable for the same reasons discussed above. If one or more initiators have established a network connection with the NVMe-oF device, the initiators may also configure the NVMe-oF settings of the NVMe-oF device. However, each of the initiators would have to configure their own target NVMe-oF devices, which would complicate the configuration process. Furthermore, because the initiators are connected to the NVMe-oF devices over a data plane, rather than the control plane, tasking the initiators with configuring the NVMe-oF devices may take much longer time and negatively impact how soon the system is ready for the data transfer. As such, it may not be desirable for the initiators configure the NVMe-oF devices.